#ifndef __APP_BUFFER_H__
#define __APP_BUFFER_H__

#include<pthread.h>
typedef struct
{
    char *data_ptr; // 数据指针
    int data_len;   // 当前数据长度
    int total_len;  // 整个空间长度
} sub_app_buffer_t; // 子缓冲区

typedef struct
{
    sub_app_buffer_t *sub_buffer[2]; // 子缓冲区数组 ---->上行缓冲区 && 下行缓冲区
    int read_index;                  // read缓冲区索引
    int write_index;                 // write缓冲区索引
    pthread_mutex_t read_lock;//读锁
    pthread_mutex_t swap_lock;//交换锁
} app_buffer_t;


/**
 * @brief 创建缓冲区
 * @return app_buffer_t
 */

 app_buffer_t *app_buffer_init();

 /**
  * 向缓冲区写入数据
  * @param buffer 缓冲区指针
  * @return 0:成功, -1:失败  
  */
int app_buffer_write(app_buffer_t *buffer, char *write_data, int write_data_len);


 /**
  * 向缓冲区读数据
  * @param 缓冲区指针
  * @param read_data 读数据指针
  * @param read_data_len 读数据长度
  * @return 读成功返回实际长度
  */

  int app_buffer_read(app_buffer_t *buffer, char *read_buff, int read_buff_len);

  /**
   * 销毁缓冲区
   */
  void app_buffer_destroy(app_buffer_t *buffer);
#endif /* __APP_BUFFER_H__ */